#ifndef OBJECT_H
#define OBJECT_H

#include <vector>
#include "edge.h"
#include "vertex.h"
#include "tetrahedron.h"

class Face;

class Object{
    public:
        Object(int = 0);
        ~Object();

        int getID() const;

        void select(bool);
        bool isSelected();

        void setConvexHull(bool);
        bool haveConvexHull();

        void setTetrahedrons(bool);
        bool haveTetrahedrons();

        void setStepByStepFirstTime(bool);
        bool isStepByStepFirstTime();

        void addTetrahedron(Tetrahedron *);
        Tetrahedron *getTetrahedron(int);
        int sizeTetrahedrons();

        void addFace(Face *);
        bool addFace(Face **);
        Face *getFace(int);
        std::vector<Face *> getFaces();
        int sizeFaces();
        void removeFace(Face *);
        void setFaces(std::vector<Face *>);

        bool addEdge(Edge **);
        Edge *getEdge(int);
        void removeEdge(Edge *);
        int sizeEdges();

        void addVertex(Vertex *);
        Vertex *getVertex(int);
        Vertex *getVertexById(int);
        int sizeVertices();
        std::vector<Vertex *> getVertices();

        std::vector<Vertex *> selectConvexHullVertices();

        void print();

//        void scale(double);
//        void translate(Point);

//        double area();

    private:
        int id;
        bool selected;
        bool convexHull;
//        bool showStepByStepFristTime;
        std::vector<Tetrahedron *> tetrahedrons;
        std::vector<Face *> faces;
        std::vector<Edge *> edges;
        std::vector<Vertex *> vertices;
};

#endif
